/*
 * * * * * * * * * * LICENCIA * * * * * * * * * * * * * * * * * * * * *

Copyright(C) 2013
Instituto Universtiario de Tecnología Dr. Federico Rivero Palacio

Este programa es Software Libre y usted puede redistribuirlo y/o modificarlo
bajo los términos de la versión 3.0 de la Licencia Pública General (GPLv3)
publicada por la Free Software Foundation (FSF), es distribuido sin ninguna
garantía. Usted debe haber recibido una copia de la GPLv3 junto con este
programa, sino, puede encontrarlo en la página web de la FSF, 
específicamente en la dirección http://www.gnu.org/licenses/gpl-3.0.html

 * * * * * * * * * * ARCHIVO * * * * * * * * * * * * * * * * * * * * *

Nombre: Instituto.js
Diseñador: Johan Alamo (johan.alamo@gmail.com)
Programador: Johan Alamo
Fecha: Febrero de 2013
Descripción:  
	Este archivo contiene los códigos javascript generales del marco de 
	trabajo.

 * * * * * * * * Cambios/Mejoras/Correcciones/Revisiones * * * * * * * *
Diseñador - Programador /   Fecha   / Descripción del cambio
---                         ----      ---------

 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*/

/*
 * Función generíca que permite enviar información al servidor sin necesidad
 * de tener los elementos creados en un formulario.
 * Parámetros de entrada:
 * 		modulo: modulo al cual se desea enviar los parametros
 * 		accion: acción a ejecutar en el servidor
 * 		formato: formato de salida (html5, movil, pdf, etc)
 * 		vista: nombre del archivo de la vista que se utilizará para mostrar
 * 			la información. ej si es "mostrar" en el servidor se buscará
 * 			"mostrar.php"
 * 		param: arreglo que contiene más parámetros en caso de ser necesario,
 * 			este puede omitirse, y si no se omite debe tener una cantidad
 * 			de elementos pares.
 * Salida:
 * 		No posee elementos de salida
 * 
 * ejemplo:
 * 		<a href='javascript:enviar("instituto","mostrar","html5","InstitutoMostrar", Array("codigo",12))' 
 * 		>mostrar </a>
 * 
 * 		Lo anterior enviará al servidor en un arreglo post lo siguiente
 * 		$_POST["m_modulo"] => "instituto"
 * 		$_POST["m_accion"] => "mostrar"
 * 		$_POST["m_formato"] => "html5"
 * 		$_POST["m_vista"] => "InstitutoMostrar"
 * 		$_POST["codigo"] =>  12
 * */
function enviar(modulo, accion, formato, vista, param){
	 param || (param = []);
	//crear el formulario
	formu = document.createElement("form");// creamos el formulario
	formu.setAttribute("method", "post");
	
	//agregarle los elementos
	crear_elementos_formulario(formu, modulo, accion, formato, vista, param);
	
	//agregarlo al body
	document.body.appendChild(formu);
	//enviarlo
	formu.submit();		
}

/*
 * Función generíca que permite enviar la información de un formulario al
 * servidor, pero agregándole los parámetros que corresponden al módulo,
 * la acción, el formato, la vista y/o algún otro parámetro requerido.
 * Parámetros de entrada:
 * 		idFormulario: el id del formulario a enviar
 * 		modulo: modulo al cual se desea enviar los parametros
 * 		accion: acción a ejecutar en el servidor
 * 		formato: formato de salida (html5, movil, pdf, etc)
 * 		vista: nombre del archivo de la vista que se utilizará para mostrar
 * 			la información. ej si es "mostrar" en el servidor se buscará
 * 			"mostrar.php"
 * 		param: arreglo que contiene más parámetros en caso de ser necesario,
 * 			este puede omitirse, y si no se omite debe tener una cantidad
 * 			de elementos pares.
 * Salida:
 * 		No posee elementos de salida
 * 
 * ejemplo:
 * 		<a href='javascript:enviar("frmInstituto", "instituto","agregar","html5","institutoAgregar")' 
 * 		>mostrar </a>
 * 
 * 		Lo anterior enviará al servidor en un arreglo post lo siguiente
 * 		$_POST["m_modulo"] => "instituto"
 * 		$_POST["m_accion"] => "agregar"
 * 		$_POST["m_formato"] => "html5"
 * 		$_POST["m_vista"] => "InstitutoAgregar"
 * 		y además el arreglo post tendrá todos los demas elementos porpios
 * 		del formulario frmInstituto
 * */
function enviarForm(idFormulario, modulo, accion, formato, vista, param){
	 param || (param = []);
	//buscar el formulario
	formu = document.getElementById(idFormulario);
	//agregarle los elementos
	crear_elementos_formulario(formu, modulo, accion, formato, vista, param);
	//enviarlo
	formu.submit();			
}

/*Agregar un elemento hidden al formulario formu
 *  con nombre elemento y value valor */
function agregar_elemento(formu,elemento,valor){
	//se crea el control
	control = document.createElement("input");
	//se le agregan las propiedades
	control.setAttribute("type", "hidden");
	control.setAttribute("name", elemento);
	control.setAttribute("value", valor);
	//se le agrega al formulario
	formu.appendChild(control); 
}
/* Función que permite crear los cuatro elementos básicos para comunicarse
 * con el servidor, es decir, creará en el formulario "formu" lo siguiente
 * 		el input hidden "m_modulo" con el valor de la variable modulo
 * 		el input hidden "m_accion" con el valor de la variable accion
 * 		el input hidden "m_formato" con el valor de la variable formato
 * 		el input hidden "m_vista" con el valor de la variable vista
 * 		el input hidden param[0] con el valor de param[1]
 * 		el input hidden param[2] con el valor de param[3]
 * 		.....
 * 		el input hidden param[n] con el valor de param[n+1], con n par
 * 
 * */
function crear_elementos_formulario(formu, modulo, accion, formato, vista, param){
	 param || (param = []);
	//agregar los hidden
	agregar_elemento(formu, "m_modulo", modulo);
	agregar_elemento(formu, "m_accion", accion);
	agregar_elemento(formu, "m_formato", formato);
	agregar_elemento(formu, "m_vista", vista);
	//agregar los hidden de los parámetros
	for (i = 0; i < param.length; i+=2)
		agregar_elemento(formu, param[i], param[i+1]);	
}

